iT邦幫忙

2024 iThome 鐵人賽

DAY 19
0
Kubernetes

Think Again Kubernetes系列 第 19

利用 Kwok 測試排程策略

  • 分享至 

  • xImage
  •  

利用 Kwok 測試排程策略

Kwok

為什麼 kube-scheduler-simulator 可以創建一個 fake Cluster?背後用的是 Kwok 這個專案,Kwok 這個專案可以讓我們用很少的資源模擬出大集群的行為。\

Kwok 會用 kwok-controller 模擬出 Pod 以及 Node,其方式就是打 kubernetes api-server,之所以可以這樣測試也得益於微服務的架構便於測試。\

Kwok 甚至可以在 CI/CD 中測試,但筆者對這塊的應用情境還不熟悉,所以就不深入介紹了。

接下來我們會利用 kwokctl 來測試我們前文提到的排程情境

測試計劃

  • 利用 kwokctl 擴展到 21 個 Node

  • 把前 11 個 node 打上標籤 ZoneA,後 10 個打上標籤 ZoneB

  • 部屬 affinity deployment

  • 檢查結果,Pod 都排程到 ZoneA 上面

  • 刪除 ZoneA 所有Node

  • 檢查結果,Pod 都排程到 ZoneB 上面

測試結果

啟動 kube-scheduler-simulator 之後,為了用 kwokctl 管理 Nodes,所以進入到容器裡面。

docker exec -it simulator-cluster sh

利用 kwokctl 擴展到 21 個 Node

kwokctl scale node --replicas 21

https://ithelp.ithome.com.tw/upload/images/20240928/20169135vz9bukeWbJ.png


這時候回到 UI 應該要看得到這些擴展出來的機器

把前 11 個 node 打上標籤 ZoneA,後 10 個打上標籤 ZoneB

for i in $(seq -w 0 10); do

  kwokctl kubectl label node node-0000$i topology.kubernetes.io/zone=A-zone

done
for i in $(seq -w 11 20); do

  kwokctl kubectl label node node-0000$i topology.kubernetes.io/zone=B-zone

done

部屬 affinity deployment

kwokctl kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend
spec:
  replicas: 30
  selector:
    matchLabels:
      app: backend
  template:
    metadata:
      labels:
        app: backend
    spec:
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 100
            preference:
              matchExpressions:
              - key: topology.kubernetes.io/zone
                operator: In
                values:
                - A-zone  # Prefer scheduling in A-zone
          - weight: 10
            preference:
              matchExpressions:
              - key: topology.kubernetes.io/zone
                operator: In
                values:
                - B-zone  # If no nodes in A-zone, schedule in B-zone
      containers:
      - name: backend-container
        image: nginx:latest  # Replace with your desired image
        ports:
        - containerPort: 80
EOF

檢查結果,Pod 都排程到 ZoneA 上面

https://ithelp.ithome.com.tw/upload/images/20240928/20169135UW6abJpFxQ.png

刪除 ZoneA 所有Node

kwokctl kubectl delete node -l topology.kubernetes.io/zone=A-zone

檢查結果,Pod 都排程到 ZoneB 上面

https://ithelp.ithome.com.tw/upload/images/20240928/201691356tWV7EmrKn.png

—--
說起來有趣,一開始 kube-scheduler-simulator 並沒有用 Kwok,之後才轉用的,如果沒有 Kwok,kube-scheduler-simulator 會自幹出什麼東西呢?


上一篇
初探以及安裝 kube-scheduler-simulator
下一篇
Kubernetes Pattern: Proactive Node
系列文
Think Again Kubernetes31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言